package util;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.File;
import java.io.IOException;

public class Direct {
    static String BigStr = "";
    static Integer index = 1;
    public static void main(String[] args) throws IOException {


        File fileAll= new File("C:\\Users\\wj\\Desktop\\123\\第6次作业(2021-2022-2-1)\\homework");

        File[] files = fileAll.listFiles();
        for (File fileOne : files) {

            if (fileOne.isDirectory()) {
                String s = fileOne.getAbsolutePath();
                File file = new File(s);

                //  遍历全部文件
                getFiles(file);
            }
        }

    }
    // 获取一个带缓冲的可变字符串，用于存储文件名


    // 用于遍历文件，传入一个File对象，返回文件名字符串
    public static String getFiles(File file) {
        StringBuffer fileName = new StringBuffer();
        //获取目录下的所有文件，存入File数组
        File[] childFiles = file.listFiles();
        //获取数组元素个数
        int length = childFiles.length;



        for (int i = 0; i < length; i++) {
            try {
                File childFile = childFiles[i];
//                if(childFile.getPath().indexOf("npy") != -1) {
                System.out.println(123);
//                    File childFile1 = childFiles[i];
//                    File childFile2 = childFiles[i+2];
                    if (childFile.isFile()) {
//                        // 将带路径的文件名追加到fileName字符串
//                        System.out.println("1111:" + childFile1.getPath());
//                        System.out.println("2222:" + childFile2.getPath());

//                        BigStr = "C:\\b\\" + (index++).toString();
                        BigStr = "C:\\Users\\wj\\Desktop\\123\\a\\";
                        System.out.println("BigStr1:" + BigStr);


                        File source1 = new File(childFile.getPath());
//                        File source2 = new File(childFile2.getPath());
                        copyFile(source1, BigStr);
//                        copyFile(source2, BigStr);

//                        File fileOne = new File(BigStr);
//                        File[] childFileTwo = fileOne.listFiles();
//                        String s1old = BigStr + "\\"+childFileTwo[0].getName();
//                        String s2old = BigStr +"\\"+ childFileTwo[1].getName();
//                        System.out.println("s1old:" + s1old);
//                        String s1new = BigStr+"\\pc1.npy";
//                        String s2new = BigStr+"\\pc2.npy";
//
//
//                        File f1old = new File(s1old);
//                        File f2old = new File(s2old);
//                        File f1new = new File(s1new);
//                        File f2new = new File(s2new);
//                        f1old.renameTo(f1new);
//                        f2old.renameTo(f2new);


//                    }
                }

            } catch (Exception e) {
                //如果捕获到非受查异常，跳过当次循环
                continue;
            }
        }
        //将fileName转成String类型字符串，并返回
        return fileName.toString();
    }

    public static void copyFile(File source,String dest ) throws IOException{
        //创建目的地文件夹
        File destfile = new File(dest);
        if(!destfile.exists()){
            destfile.mkdir();
        }
        //如果source是文件夹，则在目的地址中创建新的文件夹
        if(source.isDirectory()){
            File file = new File(dest+"\\"+source.getName());//用目的地址加上source的文件夹名称，创建新的文件夹
            file.mkdir();
            //得到source文件夹的所有文件及目录
            File[] files = source.listFiles();
            if(files.length==0){
                return;
            }else{
                for(int i = 0 ;i<files.length;i++){
                    copyFile(files[i],file.getPath());
                }
            }

        }
        //source是文件，则用字节输入输出流复制文件
        else if(source.isFile()){
            FileInputStream fis = new FileInputStream(source);
            //创建新的文件，保存复制内容，文件名称与源文件名称一致
            File dfile = new File(dest+"\\"+source.getName());
            if(!dfile.exists()){
                dfile.createNewFile();
            }

            FileOutputStream fos = new FileOutputStream(dfile);
            // 读写数据
            // 定义数组
            byte[] b = new byte[1024];
            // 定义长度
            int len;
            // 循环读取
            while ((len = fis.read(b))!=-1) {
                // 写出数据
                fos.write(b, 0 , len);
            }

            //关闭资源
            fos.close();
            fis.close();

        }
    }
}


